#define  _CRT_SECURE_NO_WARNINGS 1
//#include "head.h"

/*
realloc --> re 再开辟
realloc函数的出现让动态内存管理更加灵活。
有时会我们发现过去申请的空间太小了，有时候我们又会觉得申请的空间过大了，
那为了合理的使用内存，我们一定会对内存的大小做灵活的调整。
rea11loc 函数就可以做到对动态开辟内存大小的调整。

函数原型如下:
void* realloc(void* ptr, size t size);
	ptr 是要调整的(内存空间的起始)内存地址
	size 调整之后新空间的大小，单位是字节
	返回值为调整之后的内存起始位置。
	这个函数调整原内存空间大小的基础上，还会将原来内存中的数据移动到 新的空间。
	realloc在调整内存空间的是存在两种情况:
		情况1:原有空间之后有足够大的空间
		情况2:原有空间之后没有足够大的空间o
*/

//int main()
//{
//	int* p = (int*)malloc(10 * sizeof(int));
//	if (p == NULL)
//	{
//		perror("malloc failed\n");
//		return -1;
//	}
//	int i = 0;
//	//前五个整型空间赋值为5
//	for (i = 0; i < 5; i++)
//    {
//        p[i] = 5;
//    }
//
//	//空间变成20个整型大小
//	//p = (int*)realloc(p, 20 * sizeof(int));
//	//情况1：原有空间之后有足够大的空间 --> 在后面添加新空间
//	//情况2：原有空间之后没有足够大的空间(被使用了) --> 创建新的空间(找到满足要求的空间)，将原来数据拷贝到新空间，并释放原来的空间，返回新空间的地址
//	//情况3：扩容失败，返回NULL
//	//考虑到情况3，不能用原来的指针赋值
//	int* ptr = (int*)realloc(p, 20 * sizeof(int));
//    if (ptr == NULL)
//    {
//        perror("realloc failed\n");
//        return -1;
//    }
//	else
//	{
//        p = ptr;
//		ptr = NULL;
//	}
//	//使用
//    for (i = 5; i < 15; i++)
//    {
//        *(p + i) = 10;
//    }	
//	//释放空间
//    free(p);
//    p = NULL;
//
//	return 0;
//}
